home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / X11 / wais / ir / trie.h < prev    next >
C/C++ Source or Header  |  1995-05-09  |  1KB  |  52 lines

  1. #ifndef TRIE_H
  2. #define TRIE_H
  3. #include "cdialect.h"
  4. /*
  5.   Trie implementation of dictionary
  6.   */
  7.  
  8. #define ALPHA_SIZE 37
  9. #define CHUNK_SIZE 4096 /* allocate CHUNK_SIZE units at a time */
  10. #define MAX_BLOCKS 4096 /* maximum number of blocks to hold (maybe realloc)*/
  11.  
  12.  
  13. typedef struct _dict_data {
  14.   int next_block;
  15.   int num_occur;
  16. } dict_data;
  17.  
  18. typedef struct _trie {
  19.   char *string;
  20.   void *datum;
  21.   struct _trie **table;
  22. } trie;
  23.  
  24. typedef struct _allocator {
  25.   char* tofree[MAX_BLOCKS];
  26.   int blocks_allocated;
  27.   char* next_location;
  28.   int items_left;
  29.   int size;
  30.   void (*dispose)();
  31. } allocator;
  32.  
  33. typedef struct _trie_allocator {
  34.   allocator* tries;
  35.   allocator* trie_tables;
  36. } trie_allocator;
  37.  
  38. char* fast_alloc _AP((allocator* x));
  39. void  fast_free _AP((allocator* x));
  40. allocator* make_allocator _AP((int item_size,void (*dispose)(char *item)));
  41. trie_allocator* make_trie_allocator();
  42.  
  43. typedef trie *trie_table[ALPHA_SIZE];
  44.  
  45. void **trie_lookup _AP((char* key, trie* dict,trie_allocator* addp));
  46. trie *new_trie _AP((char* word,trie_allocator* alloc));
  47. int encode _AP((unsigned char* word));
  48.  
  49. extern trie* load_dict _AP((FILE* stream,trie_allocator *alloc));
  50.  
  51. #endif
  52.